package com.hucsmn.authentication;

import java.io.Serializable;
import java.util.Objects;

/**
 * 用户登录信息类。
 */
public class User implements Serializable {
    private static final long serialVersionUID = -2706431587921372016L;

    private String username;
    private String password;

    /**
     * 从用户名和密码，创建用户登录信息。
     *
     * @param username 用户名。
     * @param password 密码。
     */
    User(String username, String password) {
        setUsername(username);
        setPassword(password);
    }

    /**
     * 获取用户名。
     *
     * @return 用户名。
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置用户名。
     *
     * @param username 用户名。
     */
    public void setUsername(String username) {
        if (username == null) {
            throw new NullPointerException();
        }
        if (username.length() == 0) {
            throw new IllegalArgumentException();
        }
        this.username = username;
    }

    /**
     * 获取密码。
     *
     * @return 密码。
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置密码。
     *
     * @param password 密码。
     */
    public void setPassword(String password) {
        if (password == null) {
            throw new NullPointerException();
        }
        if (password.length() == 0) {
            throw new IllegalArgumentException();
        }
        this.password = password;
    }

    @Override
    public String toString() {
        return getUsername() + ":" + "*".repeat(getPassword().length());
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(username, user.username) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(username, password);
    }
}
